package com.zhangjingcheng.yunyixia.controller;

import com.zhangjingcheng.yunyixia.pojo.dto.AllUserDTO;
import com.zhangjingcheng.yunyixia.pojo.dto.LoadFileListDTO;
import com.zhangjingcheng.yunyixia.pojo.dto.RenameDTO;
import com.zhangjingcheng.yunyixia.pojo.dto.UpdateUserTotalSpaceDTO;
import com.zhangjingcheng.yunyixia.pojo.vo.AllUserVO;
import com.zhangjingcheng.yunyixia.pojo.vo.FileVO;
import com.zhangjingcheng.yunyixia.result.PageResult;
import com.zhangjingcheng.yunyixia.result.Result;
import com.zhangjingcheng.yunyixia.service.FileService;
import com.zhangjingcheng.yunyixia.service.UserService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/admin")
@Slf4j
public class AdminController {
    @Autowired
    private UserService userService;

    @Autowired
    private FileService fileService;

    /**
     * 分页获取所有用户信息
     *
     * @param dto
     * @return
     */
    @ApiOperation("分页获取所有用户信息")
    @GetMapping("/getAllUserInfo")
    public Result<PageResult<AllUserVO>> getAllUserInfo(AllUserDTO dto) {
        log.info("获取所有用户信息");
        return Result.success(userService.getAllUserInfo(dto));
    }

    /**
     * 修改用户状态
     *
     * @param id
     * @return
     */
    @ApiOperation("修改用户状态")
    @PostMapping("/updateUserStatus")
    public Result<String> updateUserStatus(@RequestParam Integer id) {
        log.info("修改用户状态");
        userService.updateUserStatus(id);
        return Result.success("修改成功");
    }

    /**
     * 加减用户总空间
     *
     * @param dto
     * @return
     */
    @ApiOperation("加减用户总空间")
    @PostMapping("/updateUserTotalSpace")
    public Result<String> updateUserTotalSpace(@RequestBody UpdateUserTotalSpaceDTO dto) {
        log.info("加减用户总空间");
        userService.updateUserTotalSpace(dto);
        return Result.success("修改成功");
    }

    /**
     * 获取所有文件
     *
     * @param dto
     * @return
     */
    @ApiOperation("获取所有文件")
    @PostMapping("/getAllFile")
    public Result<PageResult<FileVO>> getAllFile(@RequestBody LoadFileListDTO dto) {
        log.info("获取所有文件");
        PageResult<FileVO> pageResult = fileService.getAllFile(dto);
        return Result.success(pageResult);
    }

    /**
     * 批量删除文件
     *
     * @param ids
     * @return
     */
    @ApiOperation("批量删除文件")
    @PostMapping("/delFile")
    public Result<String> delFile(@RequestBody List<Integer> ids) {// 文件id集合ids
        log.info("删除文件");
        fileService.AdminDelFile(ids);
        return Result.success("删除成功");
    }

    /**
     * 管理员重命名文件
     *
     * @param dto
     * @return
     */
    @ApiOperation("管理员重命名文件")
    @PostMapping("/rename")
    public Result<String> rename(@RequestBody RenameDTO dto) {
        log.info("管理员重命名文件");
        fileService.adminRenameFile(dto);
        return Result.success("重命名成功");
    }
}
